package com.aiapphub.BaseCode.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.aiapphub.BaseCode.dto.SsoOrgDTO;
import com.aiapphub.BaseCode.entity.SsoOrg;
import com.aiapphub.BaseCode.mapper.SsoOrgMapper;
import com.aiapphub.BaseCode.service.SsoOrgService;
import com.aiapphub.BaseCode.utils.BeanCopyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 组织数据表(Org)表服务实现类
 *
 * @author makejava
 * @since 2024-09-19 17:33:17
 */
@Service("orgService")
public class SsoOrgServiceImpl extends ServiceImpl<SsoOrgMapper, SsoOrg> implements SsoOrgService {

    @Autowired(required = false)
    private SsoOrgMapper ssoOrgMapper; // 引入 Mapper

    @Override
    public List<SsoOrgDTO> getOrgTree() {
        // 获取所有组织
        List<SsoOrg> allOrgs = ssoOrgMapper.selectList(null);

        // 将所有组织转换为 DTO
        List<SsoOrgDTO> allOrgDTOs = BeanCopyUtils.copyBeanList(allOrgs, SsoOrgDTO.class);

        // 创建一个用于存储组织的 Map，以便快速查找
        Map<String, SsoOrgDTO> orgMap = new HashMap<>();
        for (SsoOrgDTO dto : allOrgDTOs) {
            orgMap.put(dto.getOrgSn(), dto);
        }

        // 构建组织树
        List<SsoOrgDTO> orgTree = new ArrayList<>();
        for (SsoOrgDTO dto : orgMap.values()) {
            if (dto.getParentSn() == null || dto.getParentSn().isEmpty()) {
                // 如果没有父组织，则是根节点
                orgTree.add(dto);
            } else {
                // 否则，找到父组织并添加到其子组织列表中
                SsoOrgDTO parentDto = orgMap.get(dto.getParentSn());
                if (parentDto != null) {
                    parentDto.getChildren().add(dto);
                }
            }
        }
        return orgTree;
    }

    @Override
    @Transactional // 确保事务的一致性
    public void saveOrgData(List<SsoOrg> ssoOrgDataList) {
        if (ssoOrgDataList != null && !ssoOrgDataList.isEmpty()) {
            ssoOrgMapper.insertBatch(ssoOrgDataList); // 批量插入
        }
    }

    @Override
    public boolean existsByOrgId(Long orgId) {
        return getById(orgId) != null;
    }


}

